package LimitedTimeGame.Day_0130;

/**
 * @author zxc
 * @date 2023/01/30 12:10
 **/

import java.util.*;
import java.util.stream.Collectors;

/**
 * 题目 ：多个数组求交集
 * 题目详述 :
 * 给你一个二维整数数组 nums ，其中 nums[i] 是由 不同 正整数组成的一个非空数组，按 升序排列 返回一个数组，
 * 数组中的每个元素在 nums所有数组 中都出现过。
 *
 * 提示：
 * 1 <= nums.length <= 1000
 * 1 <= sum(nums[i].length) <= 1000
 * 1 <= nums[i][j] <= 1000
 * nums[i] 中的所有值 互不相同
 */
public class Intersection {
    public List<Integer> intersection(int[][] nums) {
        HashMap<Integer , Integer> hashMap = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for (int[] num : nums) {
            for (int item : num) {
                hashMap.put(item, hashMap.getOrDefault(item,0) + 1);
            }
        }
        for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
            if(entry.getValue() == nums.length){
                list.add(entry.getKey());
            }
        }
        // 由于返回值集合中元素需要从小到大进行排序;
        // 使用集合stream()类，使用流式编程来实现对于集合元素的排序;
        return list.stream().sorted().collect(Collectors.toList());

//        List<Integer> list = new ArrayList<>();
//        HashSet<Integer> set = new HashSet<>();
//        for (int item : nums[0]) {
//            set.add(item);
//        }
//        for(int i = 1; i < nums.length; i++){
//            HashSet<Integer> tempSet = new HashSet<>();
//            for (int item : nums[i]) {
//                if(set.contains(item)){
//                    tempSet.add(item);
//                }
//            }
//            set = tempSet;
//        }
//        for (Integer item : set) {
//            list.add(item);
//        }
//        return list.stream().sorted().collect(Collectors.toList());
    }
}
